interface Setting {
  projectName: string
  version: string
  primaryColor: string
  theme: string
  layoutMode: string
}

interface HeaderCellStyle {
  backgroundColor?: string
  color: string
}

interface TableConfig {
  dataList: Array<any>
  stripe: boolean
  border: boolean
  size: string
  headerCellStyle: HeaderCellStyle
  height: string | number
  tableLoading: boolean
}

interface SelectOptionItem {
  label: string
  value: any
}

interface TableSearchItem {
  name: string
  label: string
  value: any
  type: string
  placeholder?: string
  selectOptions?: Array<SelectOptionItem>
  associatedOption?: string
  onChange?: (value: any, associationItem: string) => void
  span?: number
}

interface FormItem extends TableSearchItem {
  validator?: (value: FormItem, associationItem?: FormItem) => boolean
  hidden?: boolean
  inputType?: string
  maxLength?: number
  rows?: number
  disabled?: boolean
  radioOptions?: Array<SelectOptionItem>
  checkOptions?: Array<SelectOptionItem>
  filterable?: boolean
  style?: string
  reset?: () => void
}

interface LikeSearchModel {
  conditionItems: Array<TableSearchItem> | null
  extraParams?: (() => Record<string, any>) | Record<string, any>
}

interface TreeDataType {
  label: string
  value: string | number
  children?: TreeDataType[]
}